home *** CD-ROM | disk | FTP | other *** search
/ Alles Voor Internet / Tout Pour Internet / alles voor internet.iso / MacInternet™ / Unix / macutil2.0b1.shar / macutil / util / util.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-05-21  |  3.5 KB  |  210 lines

  1. #include <stdio.h>
  2. #include "../fileio/fileglob.h"
  3. #include "masks.h"
  4. #include "util.h"
  5.  
  6. extern void exit();
  7.  
  8. #define MACTIMOFFS    1904
  9.  
  10. static int mlength[] = {0, 31, 61, 92, 122, 153, 184, 214, 245, 275, 306, 337};
  11.  
  12. unsigned long get4(bp)
  13. char *bp;
  14. {
  15.     register int i;
  16.     long value = 0;
  17.  
  18.     for(i = 0; i < 4; i++) {
  19.     value <<= 8;
  20.     value |= (*bp & BYTEMASK);
  21.     bp++;
  22.     }
  23.     return value;
  24. }
  25.  
  26. /* For if integers are stored wrong-endian. */
  27. unsigned long get4i(bp)
  28. char *bp;
  29. {
  30.     register int i;
  31.     long value = 0;
  32.  
  33.     bp += 3;
  34.     for(i = 0; i < 4; i++) {
  35.         value <<= 8;
  36.         value |= (*bp & BYTEMASK);
  37.         bp--;
  38.     }
  39.     return value;
  40. }
  41.  
  42. unsigned long get2(bp)
  43. char *bp;
  44. {
  45.     register int i;
  46.     int value = 0;
  47.  
  48.     for(i = 0; i < 2; i++) {
  49.     value <<= 8;
  50.     value |= (*bp & BYTEMASK);
  51.     bp++;
  52.     }
  53.     return value;
  54. }
  55.  
  56. /* For if integers are stored wrong-endian. */
  57. unsigned long get2i(bp)
  58. char *bp;
  59. {
  60.     register int i;
  61.     long value = 0;
  62.  
  63.     bp += 1;
  64.     for(i = 0; i < 2; i++) {
  65.         value <<= 8;
  66.         value |= (*bp & BYTEMASK);
  67.         bp--;
  68.     }
  69.     return value;
  70. }
  71.  
  72. unsigned char getb(fp)
  73. FILE *fp;
  74. {
  75.     int c;
  76.  
  77.     bytes_read += 1;
  78.     c = getc(fp);
  79.     if(c == EOF) {
  80.     (void)fprintf(stderr, "\nPremature EOF\n");
  81.     exit(1);
  82.     }
  83.     return c & BYTEMASK;
  84. }
  85.  
  86. void copy(d, s, n)
  87. char *d, *s;
  88. int n;
  89. {
  90.     while(--n >= 0) {
  91.     *d++ = *s++;
  92.     }
  93. }
  94.  
  95. int do_query()
  96. {
  97.     char *tp, temp[10];
  98.  
  99.     (void)fprintf(stderr, "? ");
  100.     (void) fflush(stdout);
  101.     (void) read(2, temp, sizeof(temp));
  102.     temp[sizeof(temp) - 1] = 0;
  103.     tp = temp;
  104.     while(*tp != 0) {
  105.     if(*tp == 'y' || *tp == 'Y') {
  106.         return 1;
  107.     } else {
  108.         tp++;
  109.     }
  110.     }
  111.     return 0;
  112. }
  113.  
  114. void put4(dest, value)
  115. char *dest;
  116. unsigned long value;
  117. {
  118.     *dest++ = (value >> 24) & BYTEMASK;
  119.     *dest++ = (value >> 16) & BYTEMASK;
  120.     *dest++ = (value >> 8) & BYTEMASK;
  121.     *dest++ = value & BYTEMASK;
  122. }
  123.  
  124. void put2(dest, value)
  125. char *dest;
  126. unsigned long value;
  127. {
  128.     *dest++ = (value >> 8) & BYTEMASK;
  129.     *dest++ = value & BYTEMASK;
  130. }
  131.  
  132. void do_indent(indent)
  133. int indent;
  134. {
  135.     int i;
  136.  
  137.     for(i = 0; i < indent; i++) {
  138.     (void)fputc(' ', stderr);
  139.     }
  140. }
  141.  
  142. real_time set_time(year, month, day, hours, minutes, seconds)
  143. int year, month, day, hours, minutes, seconds;
  144. {
  145.     real_time toset;
  146.  
  147.     toset.year = year;
  148.     toset.month = month;
  149.     toset.day = day;
  150.     toset.hours = hours;
  151.     toset.minutes = minutes;
  152.     toset.seconds = seconds;
  153.     return toset;
  154. }
  155.  
  156. unsigned long tomactime(time)
  157. real_time time;
  158. {
  159.     long accum;
  160.     int year;
  161.  
  162.     accum = time.month - 3;
  163.     year = time.year;
  164.     if(accum < 0) {
  165.     accum += 12;
  166.     year--;
  167.     }
  168.     accum = time.day + mlength[accum] + 59;
  169.     accum += (year - MACTIMOFFS) * 365 + year / 4 - MACTIMOFFS / 4;
  170.     accum = ((accum * 24 + time.hours) * 60 + time.minutes) * 60 + time.seconds;
  171.     return (unsigned)accum;
  172. }
  173.  
  174. real_time frommactime(accum)
  175. unsigned long accum;
  176. {
  177. long tmp1, tmp2;
  178. real_time time;
  179.  
  180.     time.seconds = tmp1 = accum % 60;
  181.     accum /= 60;
  182.     time.minutes = tmp1 = accum % 60;
  183.     accum /= 60;
  184.     time.hours = tmp1 = accum % 24;
  185.     accum /= 24;
  186.     tmp1 = (long)accum - 60;
  187.     tmp2 = tmp1 % 1461;
  188.     if(tmp2 < 0) {
  189.     tmp2 += 1461;
  190.     }
  191.     tmp1 = (tmp1 - tmp2) / 1461;
  192.     time.year = tmp1 * 4;
  193.     tmp1 = tmp2 / 365;
  194.     if(tmp1 > 3) {
  195.     tmp1 = 3;
  196.     }
  197.     time.year += tmp1 + MACTIMOFFS;
  198.     tmp2 -= tmp1 * 365;
  199.     tmp1 = 12;
  200.     while(mlength[--tmp1] > tmp2);
  201.     time.day = tmp2 + 1 - mlength[tmp1];
  202.     time.month = tmp1 + 3;
  203.     if(tmp1 > 9) {
  204.     time.month = tmp1 - 9;
  205.     time.year++;
  206.     }
  207.     return time;
  208. }
  209.  
  210.